// utils/pagePath.js

/**
 * 页面路径管理器
 * 用于解决自定义导航栏无法正确获取当前页面路径的问题
 */
class PagePathManager {
  constructor() {
    this.currentPath = '';
    this.listeners = [];
  }

  /**
   * 设置当前页面路径
   * @param {string} path 页面路径
   */
  setCurrentPath(path) {
    this.currentPath = path;
    this.notifyListeners(path);
  }

  /**
   * 获取当前页面路径
   * @returns {string} 当前页面路径
   */
  getCurrentPath() {
    return this.currentPath;
  }

  /**
   * 添加路径变化监听器
   * @param {Function} listener 监听器函数
   */
  addListener(listener) {
    this.listeners.push(listener);
  }

  /**
   * 移除路径变化监听器
   * @param {Function} listener 监听器函数
   */
  removeListener(listener) {
    const index = this.listeners.indexOf(listener);
    if (index > -1) {
      this.listeners.splice(index, 1);
    }
  }

  /**
   * 通知所有监听器
   * @param {string} path 新的页面路径
   */
  notifyListeners(path) {
    this.listeners.forEach(listener => {
      try {
        listener(path);
      } catch (error) {
      }
    });
  }
}

// 创建全局实例
const pagePathManager = new PagePathManager();

/**
 * 页面混入 - 自动管理页面路径
 */
export const PagePathMixin = {
  onLoad(options) {
    // 获取当前页面路径
    const pages = getCurrentPages();
    if (pages.length > 0) {
      const currentPage = pages[pages.length - 1];
      const route = currentPage.route || currentPage.__route__ || currentPage.path;
      if (route) {
        pagePathManager.setCurrentPath(`/${route}`);
      }
    }
  },

  onShow() {
    // 页面显示时更新路径
    const pages = getCurrentPages();
    if (pages.length > 0) {
      const currentPage = pages[pages.length - 1];
      const route = currentPage.route || currentPage.__route__ || currentPage.path;
      if (route) {
        pagePathManager.setCurrentPath(`/${route}`);
      }
    }
  }
};

export default pagePathManager;
